% Tato Fce za pomoci Dijkstrova algoritmu zjisti minimalni vzdalenost
% mezi 2ma vrcholy (a,b)

% Vstup:
% graf = reprezentovany matici sousednosti a velikosti hran
% 
% Vystup:
% nalezena minimalni vzdalenost
% a seznam vsech uzlu na teto nejkratsi ceste


function [distance cesta] = mojeDijkstra(input_graph, nodeA, nodeB)

n = size(input_graph,1);

u(1:n) = inf;
pred(1:n) = 0;

visitt = true;
pomm(1:n) = 1;

u(nodeA) = 0;
destination = nodeB;

while pomm(destination) && visitt
    j = destination;
    
    for i=1:n 
       if pomm(i) && (u(i) < u(j))
           j = i;
       end
    end
    
    if u(j) == inf
        visitt = false;
    else
       pomm(j) = 0;
       
       for i=1:n           
           if input_graph(j,i) < inf
               if u(j) + input_graph(j,i) < u(i)
                   u(i) = u(j) + input_graph(j,i);
                   pred(i) = j;                  
               end
           end           
       end        
    end    
end

i = destination;

vertexes = [];
cesta = struct('from', nodeA, 'to', nodeB, 'vertexes', vertexes);

distance = u(i);

while i ~= nodeA    
    cesta.vertexes = [i, cesta.vertexes];
    i = pred(i);            
end

cesta.vertexes = [i, cesta.vertexes];
end

